Laravel 5でDBのseeding
Eloquentでモデルをつくっておけば、その属性にデフォルト値を流し込むファクトリを生成できる。まずそちらをつくっておこう クエリビルダをつかってもできるけど、そもそもEloquentを使う予定なら先に作ってしまうほうが効率的
実際にDBにダミーデータを使ってテストを書いたりするときに便利
とかいいつつEloquentのテストなどで書いてしまう。実環境がMySQLなのに本番はSQLiteとかあまり意味がないkadoyau.icon
Seedingをする手順
DBのスキーマを見ながらEloquentモデルを作る(作らなくてもいいが、以下はUserのEloquentモデルを作ったことを前提とする) factoryクラスをつくる
php artisan make:factory UserFactory
デフォルトではdatabase/factories以下につくられる
DBのスキーマを見ながらファクトリーを定義する
code:UserFactory.php
$factory->define(App\User::class, function (Faker $faker) {
return [
'name' => $faker->name,
'email' => $faker->unique()->safeEmail,
'email_verified_at' => now(),
'password' => '$2y$10$TKh8H1.PfQx37YgCzwiKb.KjNyWgaHb9cbcoQgdIVFlYg7B77UdFm', // secret
'remember_token' => str_random(10),
];
});
未検証
/icons/empty.icon factory stateを使うと一部だけ注入することができる?
一部の属性だけ買えたものをつくりたいときにシンプルにかけそう
Seederクラスをつくる
php artisan make:seeder UsersTableSeeder
Seederクラスのrun()で先に作成したfactoryクラスを使う
code:UserTableSeeder.php
public run() {
}
未検証
/icons/empty.icon もしレコードにリレーションをもたせたいなら?
autoloaderの更新をする
composer dump-autoload
SeederクラスをつかってDBにダミーデータを入れる
php artisan db:seed --class=UsersTableSeeder
トラブル
作成したEloquentモデルがみつからないと言われて実行が失敗する
原因:composer.jsonのautload.psr-4に適切に名前空間が指定されていない
便利な小技
config/app.phpで設定可能
Migrationをやり直しつつseeding
php artisan migrate:refresh --seed
外部キー制約(リレーション)に基づいた注入をする
必要になるシチュエーションの例:PostテーブルのUserのダミーデータは、UserテーブルにいるUserに限定したい